package com.songtech.server.frame.utils;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.exceptions.JedisConnectionException;

import java.util.Map;

public class CacheUtils {
	
//	private static JedisPool POOL;
//	private static final String DEFAULT = null;
//
//	static {
//		init();
//	}
//
//	private static void init() {
//		if(POOL != null) {
//			try {
//				POOL.destroy();
//			} catch (Exception e) {
//				e.printStackTrace();
//			}
//		}
//
//		JedisPoolConfig config = new JedisPoolConfig();
//        config.setMaxTotal(ConfUtils.get("redis.max.total", Integer.class));
//        config.setMaxIdle(ConfUtils.get("redis.max.idle", Integer.class));
//        config.setMaxWaitMillis(ConfUtils.get("redis.max.wait", Integer.class));
//        config.setTestOnBorrow(true);
//        config.setTestOnReturn(true);
//
//		POOL = new JedisPool(
//        		config,
//        		ConfUtils.get("redis.host", String.class),
//        		ConfUtils.get("redis.port", Integer.class),
//        		ConfUtils.get("redis.timeout", Integer.class));
//	}
//
//	private static Jedis get() {
//		try {
//			return POOL.getResource();
//		} catch (JedisConnectionException e) {
//			init();
//			return get();
//		}
//	}
//
//	public static void set(String key, Object value) {
//		set(DEFAULT, key, value, 0);
//	}
//
//	public static void set(String key, Object value, int liveSeconds) {
//		set(DEFAULT, key, value, liveSeconds);
//	}
//
//	public static void set(String namespace, String key, Object value) {
//		set(namespace, key, value, 0);
//	}
//
//	public static void set(String namespace, String key, Object value, int liveSeconds) {
//		String tmp = null;
//		if(value instanceof String) {
//			tmp = value.toString();
//		} else if(value instanceof Number) {
//			tmp = String.valueOf(value);
//		} else {
//			tmp = JsonUtils.toString(value);
//		}
//
//		Jedis jedis = get();
//		if(namespace == null) {
//			jedis.set(key, tmp);
//			if(liveSeconds > 0) {
//				jedis.expire(key, liveSeconds);
//			}
//		} else {
//			jedis.hset(namespace, key, tmp);
//			if(liveSeconds > 0) {
//				jedis.expire(namespace, liveSeconds);
//			}
//		}
//		POOL.returnResourceObject(jedis);
//	}
//
//	public static <T> T get(String key, Class<T> type) {
//		return get(DEFAULT, key, type);
//	}
//
//	@SuppressWarnings("unchecked")
//	public static <T> T get(String namespace, String key, Class<T> type) {
//		Jedis jedis = get();
//		String value =
//				namespace == null?
//				jedis.get(key):
//				jedis.hget(namespace, key);
//		POOL.returnResourceObject(jedis);
//
//		if(type.isAssignableFrom(String.class)) {
//			return (T) value;
//		} else if(type.isAssignableFrom(Integer.class)) {
//			return (T) Integer.valueOf(value);
//		} else {
//			return JsonUtils.parse(value, type);
//		}
//	}
//
//	public static Map<String, String> getMap(String namespace) {
//		Jedis jedis = get();
//		Map<String, String> res = jedis.hgetAll(namespace);
//		POOL.returnResourceObject(jedis);
//		return res;
//	}
//
//	public static void remove(String namespace, String key) {
//		Jedis jedis = get();
//		if(namespace == null) {
//			jedis.del(key);
//		} else {
//			jedis.hdel(namespace, key);
//		}
//		POOL.returnResourceObject(jedis);
//	}
//
//	public static boolean has(String key) {
//		return has(DEFAULT, key);
//	}
//
//	public static boolean has(String namespace, String key) {
//		Jedis jedis = get();
//		boolean res = jedis.hexists(namespace, key);
//		POOL.returnResourceObject(jedis);
//		return res;
//	}
//
//	public static long count(String key) {
//		return count(DEFAULT, key);
//	}
//
//	public static long count(String namespace, String key) {
//		Jedis jedis = get();
//		long res = jedis.hlen(namespace + key);
//		POOL.returnResourceObject(jedis);
//		return res;
//	}
}
